Localitatea programelor
Un exemplu de alocare a informatiei sub comanda explicita a programului este constituit de gestiunea registrelor efectuata de catre un programator in limbajul de asamblare. Registrele CPU reprezinta cea mai rapida forma de memorie din sistem, dar capacitatea lor nu este suficient de mare pentru a memora toate datele manipulate de catre un program. Deci, un programator experimentat foloseste registrele pentru a memora datele la care frecventa de acces este cea mai mare. Mai mult, intrucit multimea acestor variabile se poate schimba pe durata executiei unui program, programatorul va modifica modul de utilizare a registrelor asa incit variabilele care nu mai sint intens utilizate de catre sectiunea urmatoare de cod sa fie mutate inapoi in memoria primara, de unde se aduc in registre cele frecvent apelate. 
In cadrul acestui exemplu gestiunea unei zone de memorie unica si rapida se bazeaza pe cunoasterea structurii programului. Deci, o astfel de tehnica nu este adecvata pentru gestionarea memoriei prin mecanisme hardware sau de catre sistemul de operare, pentru ca lor le lipsesc cunostintele despre program. Un numar de experimente si masurari efectuate asupra sistemelor a evidentiat existenta unui principiu, numit principiul localitatii programelor (program locality). El se poate enunta astfel:
daca la momentul t se face acces la adresa de memorie x, exista o probabilitate ridicata ca, la momentul t+dt,sa se efectueze accesul la adresa de memorie x+dx, unde dt si dx sint valori mici ale lui t si x.
Cu alte cuvinte, principiul arata ca procesul de acces la memorie al unui program in executie se poate diviza in faze. Pe durata fiecarei faze referirile la memorie au loc doar in cadrul unui unic subspatiu al spatiului de memorie disponibil, accesul la memorie fiind concentrat in jurul citorva blocuri contigue de memorie. Doar cind programul se muta de la o faza la alta modelul de acces la memorie devine neuniform, pina la atingerea noii faze, dupa care referirile la memorie se centreaza pe o aglomerare diferita de blocuri.
Mecanismele de gestiune automata a spatiului de memorie pot folosi localitatea programelor pentru a pastra in memoria rapida subspatiul de memorie cu cele mai frecvente accese in cadrul programului curent. Un element esential consta in detectarea tranzitiei intre faze si identificarea locatiilor de memorie utilizate de catre fiecare faza. In cele ce urmeaza se vor ilustra solutiile cele mai des folosite ale acestor probleme.
In final, combinarea gestionarii automate a memoriei cu cea efectuata de catre utilizator presupune oferirea de catre programator a unor informatii privind structura programului, ceea ce permite mecanismului automat sa mute informatiile intre diferitele subsisteme de memorie corespunzator informatiilor furnizate de catre programator.

Adrese fizice si virtuale
Organizarea memoriei in citeva subsisteme diferite are implicatii importante asupra adresarii. Intrucit alocarea memoriei este dinamica, este mai bine ca programul (deci CPU) sa nu utilizeze direct adresele efective ale locatiilor de memorie in care sint stocate informatiile la care se face accesul, intrucit ar fi necesara relocarea programului ori de cite ori un subset al sau este mutat in cadrul memoriei. Solutia adoptata in mod curent consta in a aloca programului propriul sau spatiu de adresare, care difera de spatiul efectiv de adresare implementat in cadrul sistemului. In consecinta este necesara transformarea, la momentul rularii, a adresei in program (adresa virtuala) in adresa de memorie (adresa fizica), transformare ce utilizeaza un suport hardware adecvat. Intrucit spatiile de adresare virtual si fizic sint independente, este normal ca si dimensiunile lor sa difere. Deci, spatiul de memorie virtuala poate fi mai mare decit dimensiunea memoriei primare, in care caz sectiuni de program pot fi memorate pe dispozitivele de memorare de masa. Totusi, localitatea programului permite ca aceste programe sa ruleze eficient daca in memoria program se stocheaza sectiuni adecvate ale programului.
Este posibila existenta unor functii diferite de transformare a adreselor virtuale in adrese fizice pentru un anumit program, deci pot exista multiple spatii virtuale de adresare. Aceasta solutie complica operatia de transformare, dar evita conflicte de adresare cu alte programe, care ar putea aparea in cazul unicitatii spatiului virtual.